// 图形组件接口
interface Component {
    void display();
}

// 具体构件：文本框
class TextBox implements Component {
    @Override
    public void display() {
        System.out.println("显示文本框");
    }
}

// 具体构件：图片框
class ImageBox implements Component {
    @Override
    public void display() {
        System.out.println("显示图片框");
    }
}

// 装饰器类：持有一个 Component 对象
abstract class Decorator implements Component {
    protected Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    @Override
    public void display() {
        component.display();  // 委托给被装饰对象
    }
}

// 具体装饰器：滚动条装饰器
class ScrollBarDecorator extends Decorator {
    public ScrollBarDecorator(Component component) {
        super(component);
    }

    @Override
    public void display() {
        super.display();  // 调用原始 display 方法
        addScrollBar();   // 添加滚动条功能
    }

    private void addScrollBar() {
        System.out.println("添加滚动条");
    }
}

// 具体装饰器：边框装饰器
class BorderDecorator extends Decorator {
    public BorderDecorator(Component component) {
        super(component);
    }

    @Override
    public void display() {
        super.display();  // 调用原始 display 方法
        addBorder();      // 添加边框功能
    }

    private void addBorder() {
        System.out.println("添加黑色边框");
    }
}

// 客户端类：图形组件系统
public class GraphicComponentSystem {
    public static void main(String[] args) {
        // 创建基本的文本框和图片框
        Component textBox = new TextBox();
        Component imageBox = new ImageBox();

        // 给文本框加上滚动条
        Component textBoxWithScrollBar = new ScrollBarDecorator(textBox);

        // 给图片框加上黑色边框
        Component imageBoxWithBorder = new BorderDecorator(imageBox);

        // 给文本框加上滚动条和黑色边框
        Component textBoxWithScrollBarAndBorder = new BorderDecorator(textBoxWithScrollBar);

        // 显示效果
        System.out.println("文本框加滚动条：");
        textBoxWithScrollBar.display();

        System.out.println("\n图片框加黑色边框：");
        imageBoxWithBorder.display();

        System.out.println("\n文本框加滚动条和边框：");
        textBoxWithScrollBarAndBorder.display();
    }
}
